<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
    // 一、可选链式操作符 ?
    //     var obj = {
    //         myname:"张三",
    //         hobby:{
    //             one:"篮球"
    //         }
    //     }
    //    console.log(obj?.hobby?.one);

    // 二、空合并运算符   ?? 类似 || 
    // function fn(a,b){
    //     var a = a ?? 1;
    //     var b = b ?? 2;
    //     console.log(a,b);
    // }

    // fn(10,"")


    // 三、迭代器 在js里 某些数据类型里 内置的；
    // 惰性执行 
    // 数据里有 ：Symbol.iterator 证明有内置迭代器
    // 数组  map  set 有 内置迭代器 
    // var arr = [1,2,3,4];
    // console.log(arr);

    // var obj = {
    //     myname:"张三",
    //     age:20
    // }
    // console.log(obj);
    // var map = new Map([['name',"张三"]]);
    // console.log(map);

    // 迭代器（interator） 会提供一个方法和2个属性
    // let arr = ["张三","李四","王五"];

    // // 获取数组的迭代器 ；
    // // 迭代器的方法就是 next();  属性是 value ： 键值  和 done ： 代表是否迭代完成 false 没有完成 ，true 代表迭代完成了；
    // var interatorObj = arr[Symbol.iterator]();
    // // console.log(interatorObj);
    // console.log(interatorObj.next());
    // console.log(interatorObj.next());
    // console.log(interatorObj.next());
    // console.log(interatorObj.next());


    // for  of 循环  ，内置迭代器的数据 可以使用for of 循环
    
    // let arr = ["张三","李四","王五"];

    // for(let val of arr){
    //     console.log(val);
    // }

    // var obj = {
    //     myname:"张三",
    //     age:20
    // }

    // for(let val of obj){
    //     console.log(val);
    // }

    // 内置迭代器 内置一个 entries方法  ,会存放键名和键值
    // let arr = ["张三","李四","王五"];
    // // console.log(arr.entries());
    // // for(let val of arr.entries()){
    // //     console.log(val);
    // // }


    // for(let [key,item] of arr.entries()){
    //     console.log(key,item);
    // }




    </script>
</body>
</html>